package net.oschina.aibinxiao.service.impl;

import java.util.Date;

import org.apache.commons.lang.StringUtils;

import net.oschina.aibinxiao.dao.UserDao;
import net.oschina.aibinxiao.dao.impl.UserDaoImpl;
import net.oschina.aibinxiao.domain.User;
import net.oschina.aibinxiao.service.UserService;
import net.oschina.aibinxiao.util.MailUtils;
import net.oschina.aibinxiao.util.SHAEncryptUtil;

/**
 * 用户业务逻辑实现类
 * @author aibinxiao
 * @date 2017年11月8日 下午4:43:01
 */
public class UserServiceImpl implements UserService {

	/**
	 * 用户注册，保存用户数据
	 */
	@Override
	public void regist(User user) {
		// 将数据存入到数据库
		UserDao userDao = new UserDaoImpl();
		
		try {
			userDao.regist(user);
			// 发送一封激活邮件
			MailUtils.sendMail(user);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	/**
	 * 根据email查询用户
	 */
	@Override
	public User findByEmail(String email) {
		UserDao userDao = new UserDaoImpl();
		User user = null;
		try {
			user = userDao.findByEmail(email);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return user;
	}

	/**
	 * 更新用户数据
	 */
	@Override
	public void update(User user) {
		UserDao userDao = new UserDaoImpl();
		try {
			userDao.update(user);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 校验激活码
	 */
	@Override
	public void validateActiveCode(User user, String code) throws Exception {
		// 验证用户是否存在
		if (StringUtils.isEmpty(code)) {
			throw new Exception("激活码为空！");
		}
		if (user != null) {
			// 验证用户是否已经激活
			if (user.getState() == 0) {
				// 没有激活
				Long currentTime = new Date().getTime();
				// 验证当前时间是否早于最晚激活时间，即注册后的48小时
				if (currentTime < (MailUtils.getLastActivateTime(user.getRegisterTime()))) {
					// 未超过48小时
					// 验证激活码是否正确
					if (SHAEncryptUtil.validateCode(user.getEmail(), code)) {
						// 正确
						user.setState(1); // 1.已经激活
						user.setCode(null);
						update(user);
					} else {
						throw new Exception("激活码不正确！");
					}
				} else {
					throw new Exception("激活码已过期！");
				}
			} else {
				throw new Exception("邮箱已激活！请直接登录");
			}	
		} else {
			// 根据激活码没有查询到该用户，页面跳转
			throw new Exception("该邮箱未注册（邮箱地址不存在）！");
		}
		
	}

}
